################################################################################
# контроллер каталога
################################################################################
@CLASS
CollectionsController
@USE
application.p
@BASE
ApplicationController
@OPTIONS
locals


# конструктор
@init[]
	^BASE:init[]


# действие для адреса /collections/
@ACTION_index[]
	что-то выводим в индекс


@ACTION_list[]
	^rem{ тут можно указать card_type }
	
    $oExhibits[^Exhibit:find_all[card_type = 'Calendar' LIMIT 9]]
##    $oExhibitsRandom[^Exhibit:find_all[1 ORDER BY rand() LIMIT 10]]
# 	^dshow[$oExhibits.10.oCard]
# 	^dshow[$oExhibits.10.oCard.year] - должно бы работать...
	
	^rem{ ^dstop[$ActiveRecord:hO] }

	^Exhibit:find_slave[]
	^dshow[find_slave done]
	
	<collections>
	    <collection name="calendars" title="Календарики" size="1231">
#  	        ^dshow[$oExhibits.10.oCard.year]
#  	        ^dshow[$oExhibits.10.oCard.oImage.15.oFile.name]
#  	        ^dshow[^oExhibits.10.oCard.oImage.getXml[]]
	        ^oExhibits.foreach[k;oExhibit]{
	            ^oExhibit.getXml[]
	        }
	        ^dshow[getXml done]
	    </collection>
	</collections>
##	<random>
##		^oExhibitsRandom.foreach[k;oExhibit]{
##			^oExhibit.getXml[]
##		}
##	</random>
	
# 	^dstop[$ActiveRecord:hC]


@ACTION_show[]
	$oExhibits[^Exhibit:find_all[card_type = 'Calendar' AND uid = '$h0.sPath']]
	^Exhibit:find_slave[]
	$oBj[$oExhibits.[$h0.sPath]]
	$result[^oBj.getXml[]]
	

@ACTION_collection[]
	$sCollection[^Sys:tableToClassName[$h0.sPath]]
	$iOffset(^h0.sUri.int(0))
	
	$oExhibits[^Exhibit:find_all[card_type='$sCollection' LIMIT $iOffset,20]]
    ^Exhibit:find_slave[]
	
	^oExhibits.foreach[k;oExhibit]{
	    ^oExhibit.getXml[]
	}


@ACTION_new[]
	$result[]
	
	^rem{ POST }
	^if(def $request:body){
		$hForm[^Sys:formHash[$form:fields]]
		
		^dshow[$hForm]
		
		^rem{ можно еще поискать новые объекты (приставка new_) }
		^hForm.Exhibit.foreach[sId;hFormPart]{
			^if(^sId.pos[new_] == 0){
				$iNewId[^sId.mid(4)]
				^if(^iNewId.int(0) > 0){
					^rem{ ^dstop[$hForm.Exhibit.new_$iNewId] }
					$oNewObj[^Exhibit::fromForm[$hForm.Exhibit.new_$iNewId]]
					
###					^dstop[^oNewObj.getXml[]]
					
					^oNewObj.create[]
					$result[<message>Сохранилось, наверное...</message>]
					$result[$result^oNewObj.getXml[]]
				}
			}
		}
#		
#		^rem{ сохранение нужно вынести в отдельный вызов, т.к. новые объекты нужно сохранять вместе с обновлением существующих }
#		^oBj.save[]
#
#		$result[<message>Сохранилось, наверное...</message>]
#		$result[$result^oNewObj.getXml[]]
	}
	

@ACTION_edit[]
	$iId[$h0.sPath]
	$oExhibits[^Exhibit:find_all[card_type = 'Calendar' AND uid = '$iId']]
	^Exhibit:find_slave[]
	$oBj[$oExhibits.$iId]

	^rem{ POST }
	^if(def $request:body){
		$hForm[^Sys:formHash[$form:fields]]
		
		^dshow[$hForm]
		^rem{ обновляю тот объект, про который я знаю, что его нужно обновить }
		^oBj.update[$hForm.Exhibit.$iId]
		
		^rem{ можно еще поискать новые объекты (приставка new_) }
		^hForm.Exhibit.foreach[sId;hFormPart]{
			^if(^sId.pos[new_] == 0){
				$iNewId[^sId.mid(4)]
				^if(^iNewId.int(0) > 0){
					^dstop[$hForm.Exhibit.new_$iNewId]
					$oNewObj[^Exhibit::fromForm[$hForm.Exhibit.new_$iNewId]]
				}
			}
		}
		
		^rem{ сохранение нужно вынести в отдельный вызов, т.к. новые объекты нужно сохранять вместе с обновлением существующих }
		^oBj.save[]

		$result[<message>Сохранилось, наверное...</message>]
	}
	
	$result[$result^oBj.getXml[]]
	
